home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # Check that the root filesystem is large enough to hold /rofs.
- . /lib/partman/lib/base.sh
-
- # Fudge factors
- rootfudge=200000000 # 200MB
- bootmultfudge=3
-
- partitions=
- rofssum=0
- rootrofssize=
- rootsize=
-
- parts=$(
- for dev in $DEVICES/*; do
- [ -d "$dev" ] || continue
- cd $dev
- open_dialog PARTITIONS
- while { read_line num id size type fs path name; [ "$id" ]; }; do
- [ "$fs" != free ] || continue
- [ -f "$id/method" ] || continue
- [ -f "$id/acting_filesystem" ] || continue
- [ -f "$id/mountpoint" ] || continue
- mountpoint="$(cat "$id/mountpoint")"
- echo "$mountpoint,$size"
- done
- close_dialog
- done | sort
- )
-
- seen=
- for part in $parts; do
- mountpoint="${part%,*}"
- size="${part#*,}"
- if [ "$mountpoint" = "/" ]; then
- rofssize="$(du -s --block-size=1 /rofs | cut -f1)"
- rootrofssize="$rofssize"
- rootsize="$size"
- else
- [ -d "/rofs$mountpoint" ] || continue
- rofssize="$(du -s --block-size=1 /rofs$mountpoint | cut -f1)"
- if [ "$mountpoint" = "/boot" ]; then
- rofssize="$(expr $rofssize \* $bootmultfudge)"
- else
- # general fudge factor: add 20% for luck
- rofssize="$(expr $rofssize \* 12 / 10)"
- fi
- if ! longint_le $rofssize $size ; then
- partitions="${partitions:+$partitions, }$mountpoint $rofssize"
- fi
-
- # Make sure that no parent of $mountpoint has been added to
- # $rofssum yet, otherwise we'll produce an invalid size.
- d="$(dirname $mountpoint)"
- found=
- if [ -n "$seen" ]; then
- while :; do
- if [ "$d" = / ]; then
- break
- fi
- if echo "$seen" | grep -wqs "$d"; then
- found=1
- break
- fi
- d="$(dirname $d)"
- done
- fi
- if [ -z "$found" ]; then
- rofssum="$(expr $rofssum + $rofssize)"
- seen="$seen $mountpoint"
- fi
- fi
- done
-
- if [ -n "$rootrofssize" ]; then
- rofs=$(expr $rootrofssize - $rofssum + $rootfudge)
- if ! longint_le $rofs $rootsize ; then
- partitions="/ $rofs${partitions:+, $partitions}"
- fi
- fi
-
- if [ -n "$partitions" ]; then
- partitions="$(echo "$partitions" | sed -e 's/, /\n/g')"
- db_capb escape
- db_reset ubiquity/partition-too-small
- db_subst ubiquity/partition-too-small PARTITIONS "$(printf %s "$partitions" | debconf-escape -e)"
- db_capb
- db_input critical ubiquity/partition-too-small || true
- db_go || true
- db_get ubiquity/partition-too-small
- if [ "$RET" = true ]; then
- exit 1
- fi
- fi
-
- exit 0
-